# -*- coding: utf-8 -*-
import numpy as np
from legendaryPowerScript._lpcommon.vector import Vector
from legendaryPowerScript._lpcommon.boundingboxes import CuboidBoundingBox
import mod.server.extraServerApi as serverApi
class OBB(object):
    # type: () -> None
    """
    用于表示Oriented Bounding Box（OBB，定向包围盒）的类。与CuboidBoundingBox不同，这种碰撞箱可以绕任意轴旋转

    Attributes:
        origin (Vector): 包围盒的原点位置。
        xDir (Vector): 包围盒x轴的方向向量。
        yDir (Vector): 包围盒y轴的方向向量。
        zDir (Vector): 包围盒z轴的方向向量。
        pos (Vector): 包围盒中心点位置。
        axisX (Vector): 包围盒x轴的方向向量。
        axisY (Vector): 包围盒y轴的方向向量。
        axisZ (Vector): 包围盒z轴的方向向量。
        half_size (np.array): 包围盒每个轴上长度的一半。
        dimension (int): 包围盒所在的维度。

    """
    self.origin  = Vector()
    self.xDir  = Vector()
    self.yDir  = Vector()
    self.zDir  = Vector()
    self.pos  = Vector()
    self.axisX  = Vector()
    self.axisY  = Vector()
    self.axisZ  = Vector()
    self.half_size  = np.array()
    self.dimension  = 0

    def __init__(self, point_set, dimension=None):
        # type: (CuboidBoundingBox or list[Vector], int) -> None
        """
        初始化OBB对象。

        Args:
            point_set (CuboidBoundingBox or list[Vector]): 点集或者立方体包围盒。
            dimension (int, optional): 包围盒所在的维度。
        Returns:
            None
        """
        pass

    def rotateAroundZ(self, degree, around):
        # type: (float, Vector) -> OBB
        """
        绕着z轴旋转指定的角度。

        Args:
            degree (float): 旋转角度。
            around (Vector): 旋转中心点。

        Returns:
            OBB: 旋转后的OBB对象。
        """
        return OBB()


    def rotateAroundY(self, degree, around):
        # type: (float, Vector) -> OBB
        """
        绕着y轴旋转指定的角度。

        Args:
            degree (float): 旋转角度。
            around (Vector): 旋转中心点。

        Returns:
            OBB: 旋转后的OBB对象。
        """
        return OBB()


    def offset(self, vec):
        # type: (Vector) -> None
        """
        将包围盒的位置偏移指定的向量。

        Args:
            vec (Vector): 偏移向量。

        Returns:
            None
        """
        pass

    def findEntitiesInside(self):
        # type: () -> list[Fighter]
        """
        查找包围盒内部的实体对象。

        Returns:
            list[Fighter]: 包围盒内部的实体对象列表。
        """
        pass

    def findPlayersInside(self):
        # type: () -> list[Fighter]
        """
        查找包围盒内部的玩家对象。

        Returns:
            list[Fighter]: 包围盒内部的玩家对象列表。
        """
        return []


    def __get_distance(self, point_1, point_2):  # 计算两个点的距离
        # type: (tuple, tuple) -> float
        """
        计算两个点的距离。

        Args:
            point_1 (tuple): 第一个点的坐标。
            point_2 (tuple): 第二个点的坐标。

        Returns:
            float: 两个点的距离。
        """
        return 0.0


    def intersects(self, bb):
        # type: (OBB or CuboidBoundingBox) -> bool
        """
        判断当前包围盒是否与指定的包围盒相交。
        Args:
            bb (OBB or CuboidBoundingBox): 指定的包围盒。
        Returns:
            bool: 如果相交返回True，否则返回False。
        """
        return False


